package cn.o.app.ui.pattern;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import cn.o.app.util.OUtil;

public class PatternIcon extends View {

	private String mPassword;
	private Point[] mPoints = new Point[9];
	private int mRadius;

	private Paint mStrokePaint;
	private Paint mFillPaint;

	public PatternIcon(Context context) {
		super(context);
		init();
	}

	public PatternIcon(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}

	private void init() {
		mStrokePaint = new Paint();
		mStrokePaint.setAntiAlias(true);
		mStrokePaint.setColor(0xffc0c0c0);
		mStrokePaint.setStyle(Paint.Style.STROKE);
		mStrokePaint.setStrokeWidth(OUtil.getRawSize(getContext(),
				TypedValue.COMPLEX_UNIT_DIP, 1));

		mFillPaint = new Paint();
		mFillPaint.setAntiAlias(true);
		mFillPaint.setColor(0xff000000 | 0xffff5f);
		mFillPaint.setStyle(Paint.Style.FILL_AND_STROKE);
		mFillPaint.setStrokeWidth(OUtil.getRawSize(getContext(),
				TypedValue.COMPLEX_UNIT_DIP, 1));

		for (int i = 0; i < mPoints.length; i++)
			mPoints[i] = new Point();
	}

	@Override
	protected void onLayout(boolean changed, int left, int top, int right,
			int bottom) {
		super.onLayout(changed, left, top, right, bottom);

		int w = right - left;
		int h = bottom - top;
		int cw = Math.min(w, h);

		int b = (int) (cw / 2.0);
		int a = (int) (b / 2.0);
		int c = a + b;

		mPoints[0].set(a, a);
		mPoints[1].set(a, b);
		mPoints[2].set(a, c);

		mPoints[3].set(b, a);
		mPoints[4].set(b, b);
		mPoints[5].set(b, c);

		mPoints[6].set(c, a);
		mPoints[7].set(c, b);
		mPoints[8].set(c, c);

		mRadius = (int) (a / 3.0);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);

		int i, n;

		for (i = 0; i < mPoints.length; i++)
			canvas.drawCircle(mPoints[i].x, mPoints[i].y, mRadius, mStrokePaint);

		if (mPassword != null) {
			for (i = 0; i < mPassword.length(); i++) {
				n = Integer.parseInt(String.valueOf(mPassword.charAt(i)));
				canvas.drawCircle(mPoints[n].x, mPoints[n].y, mRadius,
						mFillPaint);
			}
		}
	}

	public void setPassword(String password) {
		mPassword = password;
		invalidate();
	}

}